﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using AutenticacionFormulario.App_Data;

namespace AutenticacionFormulario
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        /// <summary>
        /// Evento de autenticación del formulario
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            string userName = Login1.UserName;
            string password = Login1.Password;
            bool rememberUserName = Login1.RememberMeSet;

            Usuario usuarioADO = new Usuario();
            USUARIO usuario =  usuarioADO.FindUsuario(userName, password);
            if (usuario != null)
            {
                List<ROLE> roles = usuarioADO.FindRolesUsuario(usuario.ID_USUARIO);
                if (roles != null)
                {
                    string rolesData = "";
                    foreach (ROLE role in roles)
                    {
                        rolesData += role.DESCRIPCION.ToString() + ";";
                    }
                    // Se crea el ticket de autenticación
                    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                    1, // Versión del ticket
                    userName,// Nombre de usuario asociado al ticket
                    DateTime.Now, // Fecha de creación del ticket
                    DateTime.Now.AddMinutes(50), // Fecha y Hora de las expiración de la cookie
                    rememberUserName, // Si el usuario cliquó en "Recuérdame" la cookie no expira.
                    rolesData, // Almacena datos del usuario, en este caso los roles
                    FormsAuthentication.FormsCookiePath); // El path de la cookie especificado en el Web.Config

                    // Se encripta la cookie para añadir más seguridad
                    string hashCookies = FormsAuthentication.Encrypt(ticket);
                    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies); // Cookie encriptada

                    // Se añade la cookie a la respuesta
                    Response.Cookies.Add(cookie);

                    // Se recupera la url que el usuario trataba de acceder
                    string returnUrl = Request.QueryString["ReturnUrl"];
                    // si no existe dicha url redirigimos al usuario a la pagina por defecto
                    if (returnUrl == null) returnUrl = "~/Default.aspx";
                    Response.Redirect(returnUrl);
                }
            }
            else // usuario y password erróneos
            {
                // no se hace nada, el control Login mostrará automáticament los errores
            }  
        }

        
    }
}
